(eshell-lisp-command): Don't perform numeric conversions if a Lisp
authorJohn Wiegley <johnw@newartisans.com>
Thu, 10 May 2001 03:47:48 +0000 (03:47 +0000)
committerJohn Wiegley <johnw@newartisans.com>
Thu, 10 May 2001 03:47:48 +0000 (03:47 +0000)
function has the property `eshell-no-numeric-conversions' set to a
non-nil value.

lisp/eshell/esh-cmd.el

index fee5ea0c3c39b3a98b7086096574d9cb4ca6f0eb..ef64fa95867780876613c6964dec906e94bfd424 100644 (file)
@@ -1265,6 +1265,8 @@ be finished later after the completion of an asynchronous subprocess."
                                name (getenv "PATH")))
        (eshell-printn program)))))
 
+(put 'eshell/which 'eshell-no-numeric-conversions t)
+
 (defun eshell-named-command (command &optional args)
   "Insert output from a plain COMMAND, using ARGS.
 COMMAND may result in an alias being executed, or a plain command."
@@ -1383,23 +1385,27 @@ messages, and errors."
 
 (defun eshell-lisp-command (object &optional args)
   "Insert Lisp OBJECT, using ARGS if a function."
-  ;; if any of the arguments are flagged as numbers waiting for
-  ;; conversion, convert them now
-  (let ((a args) arg)
-    (while a
-      (setq arg (car a))
-      (if (and (stringp arg)
-              (> (length arg) 0)
-              (get-text-property 0 'number arg))
-         (setcar a (string-to-number arg)))
-      (setq a (cdr a))))
-  (setq eshell-last-arguments args
-       eshell-last-command-name "#<Lisp>")
   (catch 'eshell-external               ; deferred to an external command
     (let* ((eshell-ensure-newline-p (eshell-interactive-output-p))
           (result
            (if (functionp object)
-               (eshell-apply object args)
+               (progn
+                 (setq eshell-last-arguments args
+                       eshell-last-command-name
+                       (concat "#<function " (symbol-name object) ">"))
+                 ;; if any of the arguments are flagged as numbers
+                 ;; waiting for conversion, convert them now
+                 (unless (get object 'eshell-no-numeric-conversions)
+                   (while args
+                     (let ((arg (car args)))
+                       (if (and (stringp arg)
+                                (> (length arg) 0)
+                                (get-text-property 0 'number arg))
+                           (setcar a (string-to-number arg))))
+                     (setq args (cdr args))))
+                 (eshell-apply object eshell-last-arguments))
+             (setq eshell-last-arguments args
+                   eshell-last-command-name "#<Lisp object>")
              (eshell-eval object))))
       (if (and eshell-ensure-newline-p
               (save-excursion